// 以get向接口发送请求



// 回调函数(把函数当成参数传到另一个函数中 让它在另一个函数中执行 => 可以理解为提前决定好要执行的内容 指定时间执行 => 锦囊妙计)
// 回调函数 => 异步编程的一种解决方法

/**
 * 
 * @param {*} options 
 *    type      请求的方式(get/post/put/delete)
 *    url       请求的地址
 *    data      携带数据 (string|object)
 *    async     是否异步
 *    dataType  接口返回数据类型(text/xml/css/js/json)
 *    success   请求成功时执行的回调函数 => 回调函数有一个形式参数 => 用于接收请求成功时的数据    
 *      
 */
function ajax(options) { // option = {url, data = "", async = true, dataType = "text", success}
    // debugger;
    var { type = "get", url, data = "", async = true, dataType = "text", success } = options;


    if (typeof data == "object") { // 判断data是对象(不准确)
        var list = [];
        for (var key in data) {
            var val = data[key];
            list.push(key + "=" + val);  //'user=a123123'
        }
        // console.log(list);

        data = list.join("&");
        // console.log(data);
    }


    var xhr = new XMLHttpRequest();

    if (type.toLowerCase() == "get") {
        xhr.open("get", data ? (url + "?" + data) : url, async);
        xhr.send();
    } else if (type.toLowerCase() == "post") {
        xhr.open("post", url, async);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(data);
    }

    xhr.onreadystatechange = function () {
        // debugger;
        if (xhr.readyState == 4 && xhr.status == 200) {
            var result = xhr.responseText;
            if (dataType == "json") {
                result = JSON.parse(result);
            }
            // console.log(result);

            // 拿到数据   => 执行后续的操作  => 多种多样
            // 登录  => 登录成功/失败
            // 查询数据  => 查询成功/失败
            // 删除数据  => 成功/失败
            // 新增数据  => 成功/失败

            if (success && typeof success === "function") {
                success(result);  //实参  => 请求成功时的数据
            }


        }
    }
}
